package com.atguigu.acl.service;

import com.atguigu.acl.dto.UpdateAdminPasswordParam;
import com.atguigu.acl.entity.Admin;
import com.atguigu.acl.entity.Permission;
import com.atguigu.acl.entity.Resource;
import com.atguigu.acl.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 管理员表 服务类
 * </p>
 *
 * @author smday
 * @since 2020-08-10
 */
public interface AdminService extends IService<Admin> {

    /**
     * 后台用户登录
     */
    String login(String username, String password);


    /**
     * 根据用户名获取后台管理员
     */
    Admin getAdminByUsername(String username);

    ///**
    // * 注册功能
    // */
    //Admin register(UmsAdminParam umsAdminParam);


    /**
     * 刷新token的功能
     * @param oldToken 旧的token
     */
    String refreshToken(String oldToken);

    /**
     * 根据用户id获取用户
     */
    Admin getItem(Long id);

    /**
     * 根据用户名或昵称分页查询用户
     */
    Map<String,Object> list(String keyword, Integer pageSize, Integer pageNum);

    /**
     * 修改指定用户信息
     */
    int update(Long id, Admin admin);

    /**
     * 删除指定用户
     */
    int delete(Long id);

    /**
     * 修改用户角色关系
     */
    @Transactional
    int updateRole(Long adminId, List<Long> roleIds);

    /**
     * 获取用户对于角色
     */
    List<Role> getRoleList(Long adminId);

    /**
     * 获取指定用户的可访问资源
     */
    List<Resource> getResourceList(Long adminId);

    /**
     * 修改用户的+-权限
     */
    @Transactional
    int updatePermission(Long adminId, List<Long> permissionIds);

    /**
     * todo 获取用户所有权限（包括角色权限和+-权限）
     */
    List<Permission> getPermissionList(Long adminId);

    /**
     * 修改密码
     */
    int updatePassword(UpdateAdminPasswordParam updatePasswordParam);

    /**
     * 获取用户信息
     */
    UserDetails loadUserByUsername(String username);

    /**
     * 新增用户
     */
    int insert(Admin admin);
}
